home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / nan_news / toolkit / outp.asm < prev    next >
Assembly Source File  |  1991-08-15  |  4KB  |  114 lines

  1. ; File......: OUTP.ASM
  2. ; Author....: Ted Means
  3. ; Date......: $Date:   15 Aug 1991 23:07:08  $
  4. ; Revision..: $Revision:   1.2  $
  5. ; Log file..: $Logfile:   E:/nanfor/src/outp.asv  $
  6. ; This function is an original work by Ted Means and is placed in the
  7. ; public domain.
  8. ;
  9. ; Modification history:
  10. ; ---------------------
  11. ;
  12. ; $Log:   E:/nanfor/src/outp.asv  $
  13. ;  
  14. ;     Rev 1.2   15 Aug 1991 23:07:08   GLENN
  15. ;  Forest Belt proofread/edited/cleaned up doc
  16. ;  
  17. ;     Rev 1.1   14 Jun 1991 19:54:52   GLENN
  18. ;  Minor edit to file header
  19. ;  
  20. ;     Rev 1.0   01 Apr 1991 01:03:46   GLENN
  21. ;  Nanforum Toolkit
  22. ;  
  23.  
  24.  
  25. ;  $DOC$
  26. ;  $FUNCNAME$
  27. ;      FT_OUTP()
  28. ;  $CATEGORY$
  29. ;      DOS/BIOS
  30. ;  $ONELINER$
  31. ;      Write a byte to a specified I/O port
  32. ;  $SYNTAX$
  33. ;     FT_OUTP( <nPort>, <nValue> ) -> lResult
  34. ;  $ARGUMENTS$
  35. ;      <nPort> is the port from which to retrieve the byte.
  36. ;
  37. ;      <nValue> is the value between 0 and 255 to write to the port.
  38. ;  $RETURNS$
  39. ;     .T. if all parameters were valid and the byte was written to
  40. ;         the port.
  41. ;     .F. if invalid parameters were passed.
  42. ;  $DESCRIPTION$
  43. ;     It may sometimes be useful to write a byte to a port without having
  44. ;     to resort to C or assembler.  This function allows you to do so.
  45. ;
  46. ;     The source code is written to adhere to Turbo Assembler's IDEAL mode.
  47. ;     To use another assembler, you will need to rearrange the PROC and
  48. ;     SEGMENT directives, and also the ENDP and ENDS directives (a very
  49. ;     minor task).
  50. ;  $EXAMPLES$
  51. ;     lOk := FT_OUTP( 100, 0 )   // send a Chr(0) to port 100 (064h)
  52. ;  $SEEALSO$
  53. ;     FT_INP()
  54. ;  $END$
  55. ;
  56.  
  57.  
  58.          IDEAL
  59.  
  60. Public   FT_OUTP
  61.  
  62. Extrn    __ParInfo:Far
  63. Extrn    __ParNI:Far
  64. Extrn    __RetL:Far
  65.  
  66. Segment  _NanFor   Word      "CODE"
  67.          Assume    CS:_NanFor
  68.  
  69. Proc     FT_OUTP   Far
  70.  
  71.          Xor       AX,AX                     ; Request param count
  72.          Push      AX                        ; Put request on stack
  73.          Call      __ParInfo                 ; Get param count
  74.          Add       SP,2                      ; Realign stack
  75.          Cmp       AX,2                      ; At least two params?
  76.          JNB       GetTypes                  ; If so, continue
  77. BadParam:Xor       AX,AX                     ; Set return value to false
  78.          Jmp       Short Exit                ; Quit
  79.  
  80. GetTypes:Mov       CX,2                      ; Specify param count
  81. Top:     Push      CX                        ; Put param # on stack
  82.          Call      __ParInfo                 ; Get param type
  83.          Pop       CX                        ; Realign stack and restore CX
  84.          Test      AX,2                      ; Numeric?
  85.          JZ        BadParam                  ; No, so abort
  86.          Loop      Top                       ; Go to top of loop
  87.  
  88.          Mov       AX,1                      ; Specify first param
  89.          Push      AX                        ; Put param # on stack
  90.          Call      __ParNI                   ; Get value
  91.          Add       SP,2                      ; Realign stack
  92.          Cmp       AX,255                    ; Value valid?
  93.          JA        BadParam                  ; No, so abort
  94.          Push      AX                        ; Save value for later
  95.  
  96.          Mov       AX,2                      ; Specify first param
  97.          Push      AX                        ; Put param # on stack
  98.          Call      __ParNI                   ; Get value
  99.          Add       SP,2                      ; Realign stack
  100.          Mov       DX,AX                     ; Move port # to DX
  101.          Pop       AX                        ; Get value from stack
  102.          Out       DX,AL                     ; Write a byte to the port
  103.          Mov       AX,1                      ; Set return value to true
  104.  
  105. Exit:    Push      AX                        ; Put return value on stack
  106.          Call      __RetL                    ; Return it to Clipper app
  107.          Add       SP,2                      ; Realign stack
  108.          Ret
  109. Endp     FT_OUTP
  110. Ends     _NanFor
  111. End
  112. 
  113.